GtkToplevelAccessible: add a private struct
authorMatthias Clasen <mclasen@redhat.com>
Mon, 15 Oct 2012 09:52:04 +0000 (05:52 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Mon, 15 Oct 2012 09:52:04 +0000 (05:52 -0400)
Move instance fields to a private struct, in preparation
for installing a11y headers.
This also required removing access to GtkToplevelAccessible innards
from the GtkWindowAccessible implementation.

gtk/a11y/gtktoplevelaccessible.c
gtk/a11y/gtktoplevelaccessible.h
gtk/a11y/gtkwindowaccessible.c

index b8692a9bb03abda7f9c2da4e8b903941b3d1a80e..dd14980cc99166a7d3a395e2b73272eb3f792958 100644 (file)
 
 #include "gtktoplevelaccessible.h"
 
+struct _GtkToplevelAccessiblePrivate
+{
+  GList *window_list;
+};
 
 G_DEFINE_TYPE (GtkToplevelAccessible, _gtk_toplevel_accessible, ATK_TYPE_OBJECT)
 
@@ -49,8 +53,8 @@ gtk_toplevel_accessible_object_finalize (GObject *obj)
 {
   GtkToplevelAccessible *toplevel = GTK_TOPLEVEL_ACCESSIBLE (obj);
 
-  if (toplevel->window_list)
-    g_list_free (toplevel->window_list);
+  if (toplevel->priv->window_list)
+    g_list_free (toplevel->priv->window_list);
 
   G_OBJECT_CLASS (_gtk_toplevel_accessible_parent_class)->finalize (obj);
 }
@@ -60,7 +64,7 @@ gtk_toplevel_accessible_get_n_children (AtkObject *obj)
 {
   GtkToplevelAccessible *toplevel = GTK_TOPLEVEL_ACCESSIBLE (obj);
 
-  return g_list_length (toplevel->window_list);
+  return g_list_length (toplevel->priv->window_list);
 }
 
 static AtkObject *
@@ -72,7 +76,7 @@ gtk_toplevel_accessible_ref_child (AtkObject *obj,
   AtkObject *atk_obj;
 
   toplevel = GTK_TOPLEVEL_ACCESSIBLE (obj);
-  widget = g_list_nth_data (toplevel->window_list, i);
+  widget = g_list_nth_data (toplevel->priv->window_list, i);
   if (!widget)
     return NULL;
 
@@ -141,6 +145,8 @@ _gtk_toplevel_accessible_class_init (GtkToplevelAccessibleClass *klass)
   class->get_parent = NULL;
 
   g_object_class->finalize = gtk_toplevel_accessible_object_finalize;
+
+  g_type_class_add_private (klass, sizeof (GtkToplevelAccessiblePrivate));
 }
 
 static void
@@ -152,18 +158,18 @@ remove_child (GtkToplevelAccessible *toplevel,
   guint window_count = 0;
   AtkObject *child;
 
-  if (toplevel->window_list)
+  if (toplevel->priv->window_list)
     {
       GtkWindow *tmp_window;
 
-      for (l = toplevel->window_list; l; l = l->next)
+      for (l = toplevel->priv->window_list; l; l = l->next)
         {
           tmp_window = GTK_WINDOW (l->data);
 
           if (window == tmp_window)
             {
               /* Remove the window from the window_list & emit the signal */
-              toplevel->window_list = g_list_delete_link (toplevel->window_list, l);
+              toplevel->priv->window_list = g_list_delete_link (toplevel->priv->window_list, l);
               child = gtk_widget_get_accessible (GTK_WIDGET (window));
               g_signal_emit_by_name (atk_obj, "children-changed::remove",
                                      window_count, child, NULL);
@@ -209,8 +215,8 @@ show_event_watcher (GSignalInvocationHint *ihint,
     return TRUE;
 
   /* Add the window to the list & emit the signal */
-  toplevel->window_list = g_list_append (toplevel->window_list, widget);
-  n_children = g_list_length (toplevel->window_list);
+  toplevel->priv->window_list = g_list_append (toplevel->priv->window_list, widget);
+  n_children = g_list_length (toplevel->priv->window_list);
 
   atk_object_set_parent (child, atk_obj);
   g_signal_emit_by_name (atk_obj, "children-changed::add",
@@ -248,7 +254,11 @@ _gtk_toplevel_accessible_init (GtkToplevelAccessible *toplevel)
   GList *l;
   guint signal_id;
 
-  l = toplevel->window_list = gtk_window_list_toplevels ();
+  toplevel->priv = G_TYPE_INSTANCE_GET_PRIVATE (toplevel,
+                                                GTK_TYPE_TOPLEVEL_ACCESSIBLE,
+                                                GtkToplevelAccessiblePrivate);
+
+  l = toplevel->priv->window_list = gtk_window_list_toplevels ();
 
   while (l)
     {
@@ -264,7 +274,7 @@ _gtk_toplevel_accessible_init (GtkToplevelAccessible *toplevel)
         {
           GList *temp_l  = l->next;
 
-          toplevel->window_list = g_list_delete_link (toplevel->window_list, l);
+          toplevel->priv->window_list = g_list_delete_link (toplevel->priv->window_list, l);
           l = temp_l;
         }
       else
@@ -285,3 +295,9 @@ _gtk_toplevel_accessible_init (GtkToplevelAccessible *toplevel)
   g_signal_add_emission_hook (signal_id, 0,
                               hide_event_watcher, toplevel, (GDestroyNotify) NULL);
 }
+
+GList *
+_gtk_toplevel_accessible_get_children (GtkToplevelAccessible *accessible)
+{
+  return accessible->priv->window_list;
+}
index a56cf82059d31bdc13ce925d0a51725c878794e1..3d4df845ea4459a8da102fc3f2f8b73c14681c80 100644 (file)
@@ -29,13 +29,15 @@ G_BEGIN_DECLS
 #define GTK_IS_TOPLEVEL_ACCESSIBLE_CLASS(klass)    (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_TOPLEVEL_ACCESSIBLE))
 #define GTK_TOPLEVEL_ACCESSIBLE_GET_CLASS(obj)     (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_TOPLEVEL_ACCESSIBLE, GtkToplevelAccessibleClass))
 
-typedef struct _GtkToplevelAccessible      GtkToplevelAccessible;
-typedef struct _GtkToplevelAccessibleClass GtkToplevelAccessibleClass;
+typedef struct _GtkToplevelAccessible        GtkToplevelAccessible;
+typedef struct _GtkToplevelAccessibleClass   GtkToplevelAccessibleClass;
+typedef struct _GtkToplevelAccessiblePrivate GtkToplevelAccessiblePrivate;
 
 struct _GtkToplevelAccessible
 {
   AtkObject parent;
-  GList *window_list;
+
+  GtkToplevelAccessiblePrivate *priv;
 };
 
 struct _GtkToplevelAccessibleClass
@@ -43,7 +45,8 @@ struct _GtkToplevelAccessibleClass
   AtkObjectClass parent_class;
 };
 
-GType _gtk_toplevel_accessible_get_type (void);
+GType  _gtk_toplevel_accessible_get_type     (void);
+GList *_gtk_toplevel_accessible_get_children (GtkToplevelAccessible *accessible);
 
 G_END_DECLS
 
index db857b978d26f026bf0de60fa39542c6d0a1e2ee..475d1420878d9871d2f8181fc39a8d71b89980b5 100644 (file)
@@ -190,7 +190,7 @@ gtk_window_accessible_get_index_in_parent (AtkObject *accessible)
       if (GTK_IS_TOPLEVEL_ACCESSIBLE (atk_obj))
         {
           GtkToplevelAccessible *toplevel = GTK_TOPLEVEL_ACCESSIBLE (atk_obj);
-          index = g_list_index (toplevel->window_list, window);
+          index = g_list_index (_gtk_toplevel_accessible_get_children (toplevel), window);
         }
       else
         {